package org.example.map;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 *
 */
public class LinkedHashMapDemo {
    public static void main(String[] args) {
        // 创建一个容量为 3、加载因子为 0.75、按插入顺序排序的 LinkedHashMap 对象
        // initialCapacity：是初始数组长度
        // loadFactor：负载因子，表示数组的元素数量/数组长度超过这个比例，数组就要扩容
        // accessOrder：false：基于插入顺序(默认)  true：基于访问顺序
        LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>(3, 0.75f, true);

        // 添加键值对
        linkedHashMap.put("A", 1);
        linkedHashMap.put("B", 2);
        linkedHashMap.put("C", 3);

        // 打印键值对，按照插入顺序排序
        System.out.println("LinkedHashMap: " + linkedHashMap);

        // 访问键为 "A" 的值，会使其成为最近访问的元素
        linkedHashMap.get("A");

        // 打印键值对，按照访问顺序排序
        System.out.println("LinkedHashMap: " + linkedHashMap);

        // 移除键为 "B" 的元素
        linkedHashMap.remove("B");

        // 打印键值对
        System.out.println("LinkedHashMap: " + linkedHashMap);

        // 获取所有键的集合
        System.out.println("Keys: " + linkedHashMap.keySet());

        // 获取所有值的集合
        System.out.println("Values: " + linkedHashMap.values());

        // 获取所有键值对的集合
        for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }

        // 判断是否包含指定的键和值
        System.out.println("Contains key \"C\": " + linkedHashMap.containsKey("C"));
        System.out.println("Contains value 2: " + linkedHashMap.containsValue(2));

        // 清空哈希表
        linkedHashMap.clear();

        // 判断哈希表是否为空
        System.out.println("Is empty: " + linkedHashMap.isEmpty());
    }
}

